home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #4 / Amiga Plus CD - 2000 - No. 4.iso / Tools / Misc / bgui / Examples / Source / ViewGroup.c < prev    next >
C/C++ Source or Header  |  2000-05-09  |  13KB  |  367 lines

  1. /*
  2.  * @(#) $Header: /cvsroot/bgui/examples/ViewGroup.c,v 41.11 2000/05/09 20:34:02 mlemos Exp $
  3.  *
  4.  * ViewGroup.c
  5.  *
  6.  * (C) Copyright 1998 Manuel Lemos.
  7.  * (C) Copyright 1994-1995 Jan van den Baard.
  8.  * (C) Copyright 1994-1995 Jaba Development.
  9.  * All Rights Reserved.
  10.  *
  11.  * Description: Test program for the clipped view groups.
  12.  *
  13.  * $Log: ViewGroup.c,v $
  14.  * Revision 41.11  2000/05/09 20:34:02  mlemos
  15.  * Bumped to revision 41.11
  16.  *
  17.  * Revision 1.2  2000/05/09 19:59:17  mlemos
  18.  * Merged with the branch Manuel_Lemos_fixes.
  19.  *
  20.  * Revision 1.1.2.4  1999/08/01 22:50:34  mlemos
  21.  * Made the assignment of the mani view scroll bars be done after creating the
  22.  * view.
  23.  *
  24.  * Revision 1.1.2.3  1998/12/08 03:53:32  mlemos
  25.  * Added a few more entries to the listview in the nested clipped view object.
  26.  *
  27.  * Revision 1.1.2.2  1998/11/20 23:31:47  mlemos
  28.  * Added a page in the main View object with another view nested inside of it.
  29.  *
  30.  * Revision 1.1.2.1  1998/10/18 17:51:41  mlemos
  31.  * Ian sources.
  32.  *
  33.  *
  34.  *
  35.  */
  36.  
  37. /* Just execute to compile
  38. dcc test.c -l bgui -proto -ms -mi -s -v
  39. quit
  40. */
  41.  
  42. #include <libraries/bgui.h>
  43. #include <libraries/bgui_macros.h>
  44. #include <clib/alib_protos.h>
  45. #include <proto/bgui.h>
  46. #include <proto/exec.h>
  47. #include <proto/intuition.h>
  48. #include <proto/dos.h>
  49.  
  50. #include <dos/dos.h>
  51. #include <dos/dostags.h>
  52.  
  53. #include <stdio.h>
  54. #include <stdlib.h>
  55.  
  56. #define SYSBASE()   (*((ULONG *)4))
  57.  
  58. Object *TestWindow, *text, *GO_BottomProp, *GO_RightProp;
  59. struct Window *win;
  60. struct Library *BGUIBase;
  61.  
  62. /*
  63. ** Cycle and Mx labels.
  64. **/
  65. UBYTE *PageLab[] = { "Information", "Nested View", "Buttons", "Strings", "CheckBoxes", "Radio-Buttons", NULL };
  66. UBYTE *MxLab[]  = { "MX #1",   "MX #2",   "MX #3",      "MX #4",         NULL };
  67. UBYTE *ListViewLab[]  = { "Entry 1",   "Entry 2",   "Entry 3",  "Entry 4",  "Entry 5",  "Entry 6",  NULL };
  68.  
  69. /*
  70. ** Cycle to Page map-list.
  71. **/
  72. ULONG Cyc2Page[] = { MX_Active, PAGE_Active, TAG_END };
  73.  
  74. /*
  75. ** Tabs-key control of the tabs gadget.
  76. **/
  77. SAVEDS ASM VOID TabHookFunc( REG(a0) struct Hook *hook, REG(a2) Object *obj, REG(a1) struct IntuiMessage *msg )
  78. {
  79.    struct Window        *window;
  80.    Object            *mx_obj = ( Object * )hook->h_Data;
  81.    ULONG           pos;
  82.  
  83.    /*
  84.    ** Obtain window pointer and
  85.    ** current tab position.
  86.    **/
  87.    GetAttr( WINDOW_Window, obj,  ( ULONG * )&window );
  88.    GetAttr( MX_Active,  mx_obj, &pos );
  89.  
  90.    /*
  91.    ** What key is pressed?
  92.    **/
  93.    if ( msg->Code == 0x42 ) {
  94.       if ( msg->Qualifier & ( IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT )) pos--;
  95.       else                          pos++;
  96.       SetGadgetAttrs(( struct Gadget * )mx_obj, window, NULL, MX_Active, pos, TAG_END );
  97.    }
  98. }
  99.  
  100. struct Hook TabHook = { NULL, NULL, ( HOOKFUNC )TabHookFunc, NULL, NULL };
  101.  
  102.  
  103. int main(void)
  104. {
  105.    Object            *c, *p, *m, *v, *s1, *s2, *s3;
  106.  
  107.    BGUIBase = OpenLibrary("bgui.library",37);
  108.  
  109.    if(!BGUIBase) {
  110.        exit(20);
  111.    }
  112.  
  113.    /*
  114.    ** Create tabs-object.
  115.    **/
  116.    c = Tabs( NULL, PageLab, 0, 0 );
  117.  
  118.    /*
  119.    ** Put it in the hook data.
  120.    **/
  121.    TabHook.h_Data = (APTR)c;
  122.  
  123.    TestWindow = WindowObject,
  124.       WINDOW_Title,           "Border gadgets",
  125.       WINDOW_AutoKeyLabel,    TRUE,
  126.       WINDOW_AutoAspect,      TRUE,
  127.       WINDOW_IDCMPHookBits,   IDCMP_RAWKEY,
  128.       WINDOW_IDCMPHook,       &TabHook,
  129.  
  130.       WINDOW_TBorderGroup,
  131.           HGroupObject,
  132.              StartMember, ButtonObject, SYSIA_Which, DEPTHIMAGE, GA_ID, 30, EndObject, EndMember,
  133.              StartMember,
  134.                 ButtonObject,
  135.                    FRM_Type,            FRTYPE_BORDER,
  136.                    LAB_Label,           "Help...",
  137.                    BUTTON_EncloseImage, TRUE,
  138.                    FRM_InnerOffsetTop,  -1,
  139.                    GA_ID,               40,
  140.                 EndObject,
  141.              EndMember,
  142.           EndObject,
  143.       WINDOW_BBorderGroup,
  144.           HGroupObject,
  145.              StartMember,
  146.                 GO_BottomProp = PropObject,
  147.                    PGA_Top,        0,
  148.                    PGA_Total,      1,
  149.                    PGA_Visible,    1,
  150.                    PGA_Arrows,     TRUE,
  151.                    PGA_Freedom,    FREEHORIZ,
  152.                    PGA_NewLook,    TRUE,
  153.                    GA_ID,          101,
  154.                 EndObject,
  155.              EndMember,
  156.           EndObject,
  157.       WINDOW_RBorderGroup,
  158.           VGroupObject,
  159.              StartMember,
  160.                 GO_RightProp = PropObject,
  161.                    PGA_Top,        0,
  162.                    PGA_Total,      1,
  163.                    PGA_Visible,    1,
  164.                    PGA_Arrows,     TRUE,
  165.                    PGA_Freedom,    FREEVERT,
  166.                    PGA_NewLook,    TRUE,
  167.                    GA_ID,          102,
  168.                 EndObject,
  169.              EndMember,
  170.           EndObject,
  171.  
  172.       WINDOW_MasterGroup,
  173.          VGroupObject,
  174.             StartMember,
  175.          v = ViewObject, VIEW_ScaleMinWidth, 25, VIEW_ScaleMinHeight, 25, FRM_Type, FRTYPE_NONE, VIEW_HScroller, NULL, VIEW_VScroller, NULL, VIEW_Object,
  176.          VGroupObject, NormalOffset, NormalSpacing,
  177.             StartMember, c, FixMinHeight, EndMember,
  178.             StartMember,
  179.                p = PageObject,
  180.                   /*
  181.                   ** Info page.
  182.                   **/
  183.                   PageMember,
  184.                      VGroupObject, NormalSpacing,
  185.                         StartMember,
  186.                            text = InfoObject, ButtonFrame, FRM_Flags, FRF_RECESSED,
  187.                               INFO_TextFormat,   "This is also an updated example of how to manage border gadgets\n"
  188.                                                  "with BGUI.\n\n"
  189.                                                  "1. It is not necessary (or recommended) to add GA_#?Border\n"
  190.                                                  "tags anymore, BGUI now handles this automatically.\n\n"
  191.                                                  "2. You may use FRTYPE_BORDER for gadgets to get the proper\n"
  192.                                                  "fill colors.\n\n"
  193.                                                  "3. You do not need to specify any frames for prop gadgets,\n"
  194.                                                  "these are done automatically.\n\n"
  195.                                                  "4. Prop gadgets that are in borders now use sysiclass images\n"
  196.                                                  "for their arrows for a more conforming look.\n",
  197.                               INFO_FixTextWidth, TRUE,
  198.                               INFO_MinLines,     14,
  199.                               GA_ID,             50,
  200.                            EndObject,
  201.                         EndMember,
  202.                         StartMember,
  203.                         HGroupObject,
  204.                            VarSpace(50),
  205.                               StartMember,
  206.                                  ButtonObject, GA_ID, 1001,
  207.                                     Label( "_Quit" ),
  208.                                  EndObject,
  209.                               EndMember,
  210.                               VarSpace(50),
  211.                            EndObject, FixMinHeight,
  212.                         EndMember,
  213.                      EndObject,
  214.  
  215.                   /*
  216.                   ** Nested view page.
  217.                   **/
  218.                   PageMember,
  219.                      VGroupObject,
  220.                         VarSpace(DEFAULT_WEIGHT),
  221.                         StartMember,
  222.                            HGroupObject,
  223.                               VarSpace( DEFAULT_WEIGHT ),
  224.                               StartMember,
  225.                                  ViewObject, VIEW_ScaleMinWidth, 50, VIEW_ScaleMinHeight, 50, FRM_Type, FRTYPE_NONE, VIEW_Object,
  226.                                     VGroupObject, NormalHOffset, NormalSpacing,
  227.                                        StartMember,
  228.                                           InfoFixed(NULL, ISEQ_C "ListView Object\nwithin a view object", NULL, 2 ), FixMinHeight,
  229.                                        EndMember,
  230.                                        StartMember,
  231.                                           ListviewObject,
  232.                                              LISTV_EntryArray,        ListViewLab,
  233.                                           EndObject,
  234.                                        EndMember,
  235.                                     EndObject,
  236.                                  EndObject,
  237.                               EndMember,
  238.                               VarSpace( DEFAULT_WEIGHT ),
  239.                            EndObject, FixMinHeight,
  240.                         EndMember,
  241.                         VarSpace(DEFAULT_WEIGHT),
  242.                      EndObject,
  243.  
  244.                   /*
  245.                   ** Button page.
  246.                   **/
  247.                   PageMember,
  248.                      VGroupObject, NormalSpacing,
  249.                         VarSpace(DEFAULT_WEIGHT),
  250.                         StartMember, PrefButton("Button #_1", 21), FixMinHeight, EndMember,
  251.                         StartMember, PrefButton("Button #_2", 22), FixMinHeight, EndMember,
  252.                         StartMember, PrefButton("Button #_3", 23), FixMinHeight, EndMember,
  253.                         VarSpace(DEFAULT_WEIGHT),
  254.                      EndObject,
  255.                   /*
  256.                   ** String page.
  257.                   **/
  258.                   PageMember,
  259.                      VGroupObject, NormalSpacing,
  260.                         VarSpace(DEFAULT_WEIGHT),
  261.                         StartMember, s1 = PrefString("String #_1", "", 256, 31), FixMinHeight, EndMember,
  262.                         StartMember, s2 = PrefString("String #_2", "", 256, 32), FixMinHeight, EndMember,
  263.                         StartMember, s3 = PrefString("String #_3", "", 256, 33), FixMinHeight, EndMember,
  264.                         VarSpace(DEFAULT_WEIGHT),
  265.                      EndObject,
  266.                   /*
  267.                   ** CheckBox page.
  268.                   **/
  269.                   PageMember,
  270.                      VGroupObject, NormalSpacing,
  271.                         VarSpace(DEFAULT_WEIGHT),
  272.                         StartMember,
  273.                            HGroupObject,
  274.                               VarSpace(DEFAULT_WEIGHT),
  275.                               StartMember,
  276.                                  VGroupObject, NormalSpacing,
  277.                                     StartMember, PrefCheckBox("CheckBox #_1", FALSE, 41), EndMember,
  278.                                     StartMember, PrefCheckBox("CheckBox #_2", FALSE, 42), EndMember,
  279.                                     StartMember, PrefCheckBox("CheckBox #_3", FALSE, 43), EndMember,
  280.                                  EndObject, FixMinWidth,
  281.                               EndMember,
  282.                               VarSpace(DEFAULT_WEIGHT),
  283.                            EndObject,
  284.                         EndMember,
  285.                         VarSpace(DEFAULT_WEIGHT),
  286.                      EndObject,
  287.                   /*
  288.                   ** Mx page.
  289.                   **/
  290.                   PageMember,
  291.                      VGroupObject,
  292.                         VarSpace(DEFAULT_WEIGHT),
  293.                         StartMember,
  294.                            HGroupObject,
  295.                               VarSpace( DEFAULT_WEIGHT ),
  296.                               StartMember, m = PrefMx("_Mx Object", MxLab, 0, 51), EndMember,
  297.                               VarSpace( DEFAULT_WEIGHT ),
  298.                            EndObject, FixMinHeight,
  299.                         EndMember,
  300.                         VarSpace(DEFAULT_WEIGHT),
  301.                      EndObject,
  302.                EndObject,
  303.             EndMember,
  304.          EndObject,
  305.          EndObject,
  306.          EndMember, EndObject,
  307.    EndObject;
  308.  
  309.    if(!TestWindow) {
  310.        exit(5);
  311.    }
  312.  
  313.    /*
  314.    ** Connect the cycle to the page.
  315.    **/
  316.    AddMap( c, p, Cyc2Page );
  317.    /*
  318.    ** Set tab-cycling order.
  319.    **/
  320.    DoMethod( TestWindow, WM_TABCYCLE_ORDER, s1, s2, s3, NULL );
  321.  
  322.    /*
  323.     * We use these to supply our own scrollers.
  324.     * If we wanted to use default scrollers, we would not use these SetAttrs.
  325.     */
  326.  
  327.    win = WindowOpen( TestWindow );
  328.  
  329.     if(win) {
  330.         BOOL quit = FALSE;
  331.         ULONG rc, sigmask, sig;
  332.  
  333.         SetGadgetAttrs((struct Gadget *)v, win, NULL, VIEW_HScroller, GO_BottomProp, VIEW_VScroller, GO_RightProp,  TAG_DONE);
  334.  
  335.         GetAttr( WINDOW_SigMask, TestWindow, &sigmask );
  336.  
  337.         while(!quit) {
  338.             sig = Wait(sigmask | SIGBREAKF_CTRL_C);
  339.  
  340.             if( sig & SIGBREAKF_CTRL_C )
  341.                 quit = TRUE;
  342.  
  343.             if( sig & sigmask ) {
  344.  
  345.                 while( (rc = HandleEvent( TestWindow )) != WMHI_NOMORE)
  346.                 {
  347.                     switch(rc)
  348.                     {
  349.                     case WMHI_CLOSEWINDOW:
  350.                     case 1001: /* Quit gadget. I am just lazy. */
  351.                         //BGUI_Request( NULL, &req, TAG_DONE );
  352.                         quit = TRUE;
  353.                         break;
  354.                     }
  355.                 }
  356.             }
  357.         }
  358.     }
  359.  
  360.     DisposeObject( TestWindow );
  361.  
  362.     CloseLibrary(BGUIBase);
  363.     return 0;
  364. }
  365.  
  366.  
  367.